package Q423;

import java.util.HashMap;
import java.util.Map;

/**
 * 从英文中重建数字
 * 给你一个字符串 s ，其中包含字母顺序打乱的用英文单词表示的若干数字（0-9）。按 升序 返回原始的数字。
 * @author 23737
 * @time 2021.11.24
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(new Solution().originalDigits("owoztneoer"));
    }
}

class Solution {
    public String originalDigits(String s) {
        Map<Character,Integer> map = new HashMap<>();
        int[] result = new int[10];
        //存字符出现次数
        for (char c : s.toCharArray()) {
            map.put(c, map.getOrDefault(c,0)+1);
        }
        //初始化数组
        //先写没有重复字符的
        result[2] = map.getOrDefault('w', 0);
        result[4] = map.getOrDefault('u', 0);
        result[6] = map.getOrDefault('x', 0);
        result[8] = map.getOrDefault('g', 0);
        result[0] = map.getOrDefault('z', 0);
        //有重复字符的 就要减去之前的重复字符
        result[3] = map.getOrDefault('t', 0) - result[2] - result[8];
        result[1] = map.getOrDefault('o', 0) - result[0] - result[2] - result[4];
        result[5] = map.getOrDefault('f', 0) - result[4];
        result[7] = map.getOrDefault('s', 0) - result[6];
        result[9] = map.getOrDefault('i', 0) - result[5] - result[6] - result[8];

        //使用StringBuilder来记录
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < result.length; i++) {
            int count = result[i];
            while(count > 0 ){
                stringBuilder.append(i);
                count--;
            }
        }
        return stringBuilder.toString();
    }
}